home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 24 / AACD 24.iso / AACD / Online / netspeechd / speechd.p < prev    next >
Encoding:
Text File  |  2001-07-31  |  4.5 KB  |  209 lines

  1. ; netSpeechD by (c) Cyborg 2001
  2. ; (c) 1999 Cyborg 
  3.  
  4.     {* Include sys:coder/preass/Options.p *}
  5.  
  6.     {* String: Version="$VER: speechd 1.0 Cyborg 2001"*}
  7.  
  8.     {* Structure sockaddr_in(),sin_len(BYTE),sin_family(BYTE),sin_port(WORD)
  9.                  sin_addr(LONG),sin_zero[8]*}
  10.     
  11.     {* Structure Sockaddr(),SA_Len(BYTE),SA_Family(BYTE),SA_Data[14]*}
  12.  
  13.     {* Structure Hostent,H_name(CHAR),h_aliases(APTR),h_addrtype(LONG)
  14.                  h_length(LONG),H_addr_list(CHAR)*}
  15.  
  16.     {* Structure servent,s_name(CHAR),s_aliases(APTR),s_port(WORD),s_proto(CHAR)*}
  17.  
  18.     {* Const AF_INET=2,INADDR_ANY=0
  19.              Sock_STREAM=1
  20.              SOCK_DGRAM=2
  21.              FIONBIO=$8004667e*}
  22.  
  23.     {* incVar: Addr,Zeiger*}
  24.  
  25.     {* NewProc=Fillbuffer[][A0,d0,d1]*}
  26.     {* NewProc=getFilename[][]*}
  27.     {* NewProc=ASC2Zahl[][a5]*}
  28.  
  29. GetSigs[]:
  30.     Signals=SetSignal(0,0)
  31.     Signals==Signals&#$F000
  32.     {* Return Signals*}
  33.  
  34. FillBuffer[a0,d0,d1]:
  35.     subq.l #1,d1
  36. .l1:move.b d0,(a0)+
  37.     dbra d1,.l1
  38.     rts    
  39.  
  40. {* IncBlock: Portname,20*}
  41.  
  42. Start:
  43.     UsePort==21846
  44.     Filename=="21846"
  45.     If GetFilename()#0
  46.      {
  47.        UsePort=asc2zahl(&Filename)
  48.      }
  49.     Portname=="speechd."+Filename
  50.     If FindPort(Portname)#0 
  51.       {
  52.        printf("Dämon läuft schon.\n")
  53.        {* return *}
  54.       }
  55.     If (MPort=PortUp(Portname))=0
  56.      {
  57.       Printf("speechd Port NICHT VERFÜGBAR!\n")
  58.       {* Return 0*}
  59.      }
  60.     {* FLUSH *}
  61.     DeineNummer==0
  62.     Printf("speechd gestartet\n")
  63.  
  64.     If (socket=TCP_Socket(AF_INET,SOCK_DGRAM,0))#-1
  65.      {
  66.         #AF_Inet=>sockaddr_in.sin_family
  67.          UsePort=>sockaddr_in.sin_port
  68.      #INADDR_ANY=>sockaddr_in.sin_addr
  69.              #16=>sockaddr_in.sin_len
  70.         ret=TCP_Bind(Socket,&Sockaddr_in,sizeof(sockaddr_in))
  71.         If Ret=-1
  72.          {
  73.            Printf("speechd - Bind-Error \n")
  74.            TCP_CloseSocket(Socket)
  75.            PortDown(mPort)
  76.            {* Return 0*}
  77.          }
  78.          While GetSigs()=0
  79.           {
  80.            Sockaddrlen==16
  81.            {* incblock: zwischenpuffer,5000*}
  82.            Fillbuffer(&Zwischenpuffer,0,5000)
  83.            res1=TCP_RecvFrom(Socket,&ZwischenPuffer,3000,0,&Sockaddr_in,&sockaddrlen)
  84.            res2=TCP_Errno()
  85.            If res2=0 or res1>-1 
  86.             {
  87.               If (sh=open("speak:",#MODE_OLD))#0
  88.                {
  89.                  Write(SH,&Zwischenpuffer,res1)
  90.                  close(SH)
  91.                }
  92.             }
  93.            If ret=-1
  94.             {
  95.               Delay(25)
  96.               RES=TCP_Errno()
  97.               Printf("speechd - Accept-Error %ld\n",*res)
  98.             }
  99.           }
  100.       {* FLUSH *}
  101.       Printf("speechd - Dämon beendet sich jetzt\n")
  102.       TCP_CloseSocket(Socket)
  103.      }
  104.     PortDown(mPort)
  105.     {* Return *}
  106.  
  107.  
  108. GetFilename:
  109.     {* IncBlock: Filename,256*}
  110.     {* IncVar: NextArg*}
  111.         cmpi.l #0,laenge
  112.         beq .l13
  113.         cmpi.l #1,laenge
  114.         beq .l13
  115.         suba.l a2,a2
  116.         suba.l a1,a1
  117.         Move.l Adresse,a0
  118. .l1:    cmpi.b #`"`,(a0)
  119.         beq .l10
  120.         cmpi.b #` `,(a0)+
  121.         beq .l1
  122.         lea -1(a0),a1
  123. .l2:    cmpi.b #`"`,(a0)
  124.         beq .l11
  125.         cmpi.b #$0a,(a0)
  126.         beq .l12
  127.         cmpi.b #$00,(a0)
  128.         beq .l12
  129.         cmpi.b #` `,(a0)+
  130.         bne .l2
  131.         Lea -1(a0),a2
  132. .l3:    suba.l a1,a2
  133.         move.l A0,NextArg
  134.         Copymem(a1,#Filename,a2)
  135.         Move.l a2,d0
  136.         rts
  137. .l10:   lea 1(a0),a1
  138.         movea.l a1,a0
  139.         bra .l22
  140. .l11:   move.l a0,a2
  141.         bra .l3
  142. .l12:   move.l a0,a2
  143.         bra .l3
  144. .l13:   moveq.l #0,d0
  145.         RTS
  146. .l22:   cmpi.b #`"`,(a0)
  147.         beq .l11
  148.         cmpi.b #$0a,(a0)
  149.         beq .l12
  150.         cmpi.b #$00,(a0)
  151.         beq .l12
  152.         lea 1(a0),a0
  153.         bne .l22
  154.  
  155. CountString2[a0]:
  156.         move.l a1,-(Sp)
  157.         move.l a0,a1
  158. .l1:    cmpi.b #$0a,(a1)
  159.         beq .l2
  160.         cmpi.b #",",(a1)
  161.         beq .l2
  162.         cmpi.b #" ",(a1)
  163.         beq .l2
  164.         cmpi.b #$00,(a1)+
  165.         bne .l1
  166.         lea -1(a1),a1
  167. .l2:    sub.l a0,a1
  168.         move.l a1,d0
  169.         move.l (sp)+,a1
  170.         RTS
  171.  
  172. ASC2Zahl[a5]:
  173.     {* IncVar: Potenz*}
  174.     Countstring2(a5)
  175.     move.l d0,d7
  176.     subq.l #2,d7
  177.     move.l #1,d0
  178.     cmpi.w #$FFFF,d7
  179.     beq .la
  180. .l0:mulu.l #10,d0
  181.     dbra d7,.l0
  182. .la:move.l d0,d6
  183.     moveq.l #0,d1
  184.     move.l a5,a0
  185.     move.b #"+",d5
  186. .l1:moveq.l #0,d0
  187.     move.b (A0)+,d0
  188.     cmpi.b #"-",d0
  189.     bne .l2
  190.     move.b d0,d5
  191.     Divs.l #10,d6
  192.     bra .l1
  193. .l2:subi.b #$30,d0
  194.     andi.l #$FF,d0
  195.     Muls.l d6,d0
  196.     divs.l #10,d6
  197.     add.l d0,d1
  198.     cmpi.l #0,d6
  199.     bne .l1
  200.     lea 1(a0),a0
  201. ;    move.l a0,NextArg
  202.     move.l d1,d0
  203.     cmpi.b #"+",d5
  204.     beq .l3
  205.     neg.l d0
  206. .l3:RTS
  207.  
  208.